

public class Test {
    public static void main(String[] args) {
        int min = 2;//每天最小叠2个
        int sum = 9;//共9个
        int value = 0;
        for (int i = 1; i<5;i++){
            value +=getValueFromNumber(min,i,sum);
            System.out.println(String.format("叠%d天-》有%d种方案",i,getValueFromNumber(min,i,sum)));
        }
        System.out.println(value);
    }
    //min：每天至少叠的只数  n：连续叠的天数 sum：总共要叠的数量
    public static int getValueFromNumber(int min, int n, int sum){
        int value=0;
        if (n==1){
            //若叠一天，则只有一种叠法
            return 1;
        }
        if (n==2){
            //若叠两天，则返回第一天可能的叠法数即可
            return sum-min-min+1;
        }
        if (n>2){
            //若天数大于2，则以第一天叠的只数分情况计算
            int min1 = min;
            int max1 = sum-min-min+1;
            for (;min1<=max1;min1++){
                value+=getValueFromNumber(min,n-1,sum-min1);
            }
        }
        return value;
    }
}
